package com.divemotor.ventarepuestosinternet.model;

import java.io.InputStream;
import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.annotations.ForeignKey;

@Entity
@Table(schema="REPUESTOS", name="REP_MOV_PROMOCION")
public class Promocion implements Serializable{

	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 3508947536320101796L;

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_REP_MOV_PROMOCION")
	@SequenceGenerator(name = "SEQ_REP_MOV_PROMOCION",  sequenceName = "REPUESTOS.SEQ_REP_MOV_PROMOCION", allocationSize = 0)
	@Column(name = "COD_ID_PROMOCION")
	private Integer idPromocion;
	
	@Column(name = "COD_SAP", length = 10)
	private String codigo;
	
	@ManyToOne
	@JoinColumn(name = "COD_ID_TIPO_PROMOCION")
	@ForeignKey(name = "REP_MOV_PROMOCION_FK01")
	private TipoPromocion tipoPromocion;
	
	@ManyToOne
	@JoinColumn(name = "COD_ID_PAIS")
	@ForeignKey(name = "REP_MOV_PROMOCION_FK02")
	private Pais pais;
	
	@Column(name = "DES_NOMBRE", length = 50)
	private String nombre;
	
	@Column(name = "DES_OBS_DETALLE_PROMOCION", length = 100)
	private String descripcion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "FEC_FECHA_INICIO")
	private Date fechaInicio;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "FEC_FECHA_FIN")
	private Date fechaFin;
	
	@Column(name = "VAL_PRECIO")
	private Double precio;
	
	@ManyToOne
	@JoinColumn(name = "COD_ID_MONEDA")
	@ForeignKey(name = "REP_MOV_PROMOCION_FK03")
	private Moneda moneda;

	@Column(name = "IND_ESTADO", length=1)
	private String estado;
	
	@Column(name = "DES_URL_IMAGEN", length = 20)
	private String urlImagen;
	
	@Column(name = "TXT_MATERIAL", length = 20)
	private String material;
	
	@Transient
	private InputStream archivo;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_CREACION",referencedColumnName="COD_ID_USUARIO" )
	private Usuario usuarioCreacion;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_MODIFICACION",referencedColumnName="COD_ID_USUARIO")
	private Usuario usuarioModificacion;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_ELIMINACION",referencedColumnName="COD_ID_USUARIO")
	private Usuario usuarioEliminacion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fec_creacion")
	private Date fechaCreacion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fec_modificacion")
	private Date fechaModificacion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fec_eliminacion")
	private Date fechaEliminacion;
	
	/*** Getters & Setters ***/

	public Integer getIdPromocion() {
		return idPromocion;
	}

	public void setIdPromocion(Integer idPromocion) {
		this.idPromocion = idPromocion;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public TipoPromocion getTipoPromocion() {
		return tipoPromocion;
	}

	public void setTipoPromocion(TipoPromocion tipoPromocion) {
		this.tipoPromocion = tipoPromocion;
	}

	public Pais getPais() {
		return pais;
	}

	public void setPais(Pais pais) {
		this.pais = pais;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Date getFechaInicio() {
		return fechaInicio;
	}

	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	public Date getFechaFin() {
		return fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public Double getPrecio() {
		return precio;
	}

	public void setPrecio(Double precio) {
		this.precio = precio;
	}

	public Moneda getMoneda() {
		return moneda;
	}

	public void setMoneda(Moneda moneda) {
		this.moneda = moneda;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getUrlImagen() {
		return urlImagen;
	}

	public void setUrlImagen(String urlImagen) {
		this.urlImagen = urlImagen;
	}
	
	public String getMaterial() {
		return material;
	}

	public void setMaterial(String material) {
		this.material = material;
	}

	public InputStream getArchivo() {
		return archivo;
	}

	public void setArchivo(InputStream archivo) {
		this.archivo = archivo;
	}

	public Usuario getUsuarioCreacion() {
		return usuarioCreacion;
	}

	public void setUsuarioCreacion(Usuario usuarioCreacion) {
		this.usuarioCreacion = usuarioCreacion;
	}

	public Usuario getUsuarioModificacion() {
		return usuarioModificacion;
	}

	public void setUsuarioModificacion(Usuario usuarioModificacion) {
		this.usuarioModificacion = usuarioModificacion;
	}

	public Usuario getUsuarioEliminacion() {
		return usuarioEliminacion;
	}

	public void setUsuarioEliminacion(Usuario usuarioEliminacion) {
		this.usuarioEliminacion = usuarioEliminacion;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public Date getFechaEliminacion() {
		return fechaEliminacion;
	}

	public void setFechaEliminacion(Date fechaEliminacion) {
		this.fechaEliminacion = fechaEliminacion;
	}
	
}
